package com.hwg.shiliupro.timer;

import com.hwg.shiliupro.po.User;
import com.hwg.shiliupro.service.UserService;
import com.hwg.shiliupro.utils.SimpleDateFormatUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.text.ParseException;
import java.util.Date;
import java.util.List;

@Configuration
@EnableScheduling
@Slf4j
public class BlockTimer {
    @Autowired
    private UserService userService;

    //2022-12-09 00:56:01  数据库日期格式  yyyy-MM-dd HH:mm:ss
//    cron表达式格式：
//    {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
    @Scheduled(cron = "0 0/1 * * * ?")
    public void test() {
        try {
            //查询数据库查找已拉黑的名单
            List<User> blocks = userService.getBlocks();
            log.info("已拉黑用户：{}", blocks);
            Date nowDate = null;
            //遍历用户名单和拉黑截止时间 查看是否已达拉黑时长
            for (User user : blocks) {
                String endTime = user.getEndTime();//拉黑截止时间
                Date endDate = SimpleDateFormatUtil.getDate(endTime);
                long endMilli = endDate.getTime();  //距离距离1970年1月1日凌晨的毫秒数 经过多少毫秒
                nowDate = new Date();
                long nowMilli = nowDate.getTime();  //现在距离1970年1月1日凌晨的毫秒数  经过多少毫秒
                if (nowMilli > endMilli) {
                    //说明 现在的时间已经超过了拉黑的截至时间  应该解除
                    Boolean flag = userService.freeBlock(user.getId());
                }
                //否则的话 没有到达拉黑时长 不做操作
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}